﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Bastanteo.Negocio;
using Bastanteo.Persistencia.ADO;
using Bastanteo.Domain;


namespace Bastanteo.Negocio
{
    public class ClienteBL
    {


        ClienteDAO ClienteDAO = new ClienteDAO();


        public Cliente RegistrarCliente(String ClienteId, string ClienteRUC,
            string RazonSocial, DateTime InicioOperaciones, string TipoEmpresa,
            int CantidadEmpleados)
        {

            Cliente _cliente = new Cliente();

            if (ClienteId == null || ClienteRUC == null || RazonSocial == null || InicioOperaciones == null ||
                 TipoEmpresa == null || CantidadEmpleados <= 0)
            {

                throw new DatosInsuficientesException("Algunos datos están vacíos");

            }


            if (ClienteDAO.Obtener(ClienteId) != null)
            {
                throw new EntidadRepetidaException("Ya existe un cliente registrado con el mismo número de documento");
            }

            _cliente.ClienteId = ClienteId;
            _cliente.ClienteRuc = ClienteRUC;
            _cliente.ClienteRazonSocial = RazonSocial;
            _cliente.ClienteInicioOperaciones = InicioOperaciones;
            _cliente.ClienteTipoEmpresa = TipoEmpresa;
            _cliente.ClienteCantEmpleados = CantidadEmpleados;



            return ClienteDAO.Crear(_cliente);
        }



        public ICollection<Cliente> ObtenerTodosClientes()
        {

            ICollection<Cliente> _clientes = null;

            _clientes = ClienteDAO.Listar();

            return _clientes;

        }


        public ICollection<Cliente> ObtenerClientePorRazonSocial(string RazonSocial)
        {

            ICollection<Cliente> _clientes = null;

            if (RazonSocial == null)
            {
                throw new DatosInsuficientesException("Tiene que ingresar la Razon social para poder buscar");
            }

            foreach (Cliente item in ClienteDAO.Listar())
            {
                if (item.ClienteRazonSocial.Contains(RazonSocial.Trim()))
                {
                    _clientes.Add(item);
                }
            }

            return _clientes;

        }

        public ICollection<Cliente> ObtenerClientePorRuc(string RUC)
        {

            ICollection<Cliente> _clientes = null;

            if (RUC == null)
            {
                throw new DatosInsuficientesException("Tiene que ingresar el RUC para poder buscar");
            }

            foreach (Cliente item in ClienteDAO.Listar())
            {
                if (item.ClienteRuc == RUC)
                {
                    _clientes.Add(item);
                }
            }

            return _clientes;

        }

        public Cliente ObtenerClientePorCodigo(string ClienteId)
        {


            if (ClienteId == null)
            {
                throw new DatosInsuficientesException("Tiene que ingresar el Código del cliente para poder buscar");
            }

            return ClienteDAO.Obtener(ClienteId);

        }
        public void EliminarClientePorId(string ClienteId)
        {

            Cliente _cliente = null;


            if (ClienteId == "")
            {
                throw new DatosInsuficientesException("Tiene que ingresar la Razon Social para poder buscar");
            }


            ClienteDAO _ClienteDao = new ClienteDAO();
            _cliente = _ClienteDao.Obtener(ClienteId);
            _ClienteDao.Eliminar(_cliente);


        }

        public string generarCodigo() {
            return ClienteDAO.GenerarNuevoCodigo();
        }

    }
}